package app;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import xmlparsers.SystemParser;

import bean.srv.ListaPreciosSRV;
import bean.srv.PaisSRV;
import bean.srv.ProveedorSRV;
import bean.srv.RodamientosSRV;
import dominio.ItemComparativaPrecio;
import dominio.ItemListaPrecios;
import dominio.ListaPrecios;
import dominio.MovimientoStock;
import dominio.Pais;
import dominio.Proveedor;
import dominio.Rodamiento;
import enums.TipoLista;

public class CPR {

	// private List<ODV> odvs;
	private static CPR instancia;
	private ProveedorSRV provSVR;
	private PaisSRV paisSVR;
	private ListaPreciosSRV listaPreciosSVR;
	private RodamientosSRV rodamientoSVR;

	private CPR() {
		super();

		provSVR = new ProveedorSRV();
		paisSVR = new PaisSRV();
		listaPreciosSVR = new ListaPreciosSRV();
		rodamientoSVR = new RodamientosSRV();
	}

	public void crearProveedor(String cuit, String razonSocial, String origen) {
		Proveedor prov = new Proveedor();
		prov.setCuit(cuit);
		prov.setRazonSocial(razonSocial);

		Pais paisOrigen = paisSVR.buscarPais(origen);
		prov.setOrigen(paisOrigen);

		provSVR.agregarProveedor(prov);
	}

	// public void modificarProveedor(int cuit, String razonSocial, String
	// origen) {
	// Proveedor prov = new Proveedor();
	// prov.setCuit(cuit);
	// prov.setRazonSocial(razonSocial);
	//
	// Pais paisOrigen = paisSVR.buscarPais("Argentina");
	// prov.setOrigen(paisOrigen);
	//
	// provSVR.agregarProveedor(prov);
	// proveedores.add(prov);
	// }

	public void modificarProveedor(String cuit, String razonSocial,
			String origen) {
		Proveedor prov = provSVR.buscarProveedor(cuit);
		prov.setRazonSocial(razonSocial);
		prov.setOrigen(paisSVR.buscarPais(origen));
		provSVR.modificarProveedor(prov);
	}

	public void eliminarProveedor(String cuit) {
		Proveedor prov = provSVR.buscarProveedor(cuit);
		provSVR.eliminarProveedor(prov);
	}

	public void crearRodamiento(Rodamiento rodamiento) {
		rodamientoSVR.agregarRodamiento(rodamiento);
	}

	public Rodamiento getMismoRodamiento(Rodamiento r) {
		return rodamientoSVR.getMismoRodamiento(r.getNumeroSerie(), r.getSufijo(),
				r.getMarca(), r.getOrigen());
	}

	public void modificarRodamiento(Rodamiento rodamiento) {

	}

	public void eliminarRodamiento(int rodamientoId) {

	}

	public void obtenerMejoresPrecios(String[] marca, String[] caracteristicas,
			String[] paises, String[] codigos) {

	}

	/*
	 * public ItemProveedorDto obtenerDetalleItem(Object ItemListaPrecios item)
	 * {
	 * 
	 * }
	 */

	public void registrarListaPreciosProveedor(ListaPrecios lista) {

	}

	public void registrarMovimiento(MovimientoStock movimiento) {

	}

	public static CPR getCPR() {
		if (instancia == null) {
			instancia = new CPR();
		}
		return instancia;
	}

	public Proveedor loadProveedor(Proveedor prov) {
		return provSVR.loadProveedor(prov);
	}

	public Proveedor buscarProveedor(String cuit) {
		return provSVR.buscarProveedor(cuit);
	}

	public void persistirListaPrecios(String cuitProveedor, int numeroLista,
			String vigenciaDesde, String vigenciaHasta, int reemplazaListaNro,
			TipoLista tipo) {
		Proveedor prov = provSVR.buscarProveedor(cuitProveedor);
		listaPreciosSVR.newListaPrecios(prov, numeroLista, vigenciaDesde,
				vigenciaHasta, reemplazaListaNro, tipo);
	}

	public void persistirItemListaPrecios(int idRodamiento, int stock,
			BigDecimal precio, int idLista) {
		Rodamiento rodamiento = rodamientoSVR.getRodamiento(idRodamiento);
		ListaPrecios lista = listaPreciosSVR.getListaPrecios(idLista);

		ItemListaPrecios itemLista = new ItemListaPrecios();
		// itemLista.setRodamiento(rodamiento);

		listaPreciosSVR.agregarItemListaPrecios(lista, itemLista);
	}

	public List<ItemComparativaPrecio> obtenerComparativaPrecios() {
		List<ItemComparativaPrecio> resultado = new ArrayList<ItemComparativaPrecio>();

		return resultado;
	}

	public void persistirListaPrecios(String path) {
		ListaPrecios lp = SystemParser.getInstance().parseListasPrecios(
				"xmls/lista_precios.xml");
		listaPreciosSVR.newListaPrecios(lp);
	}
}
